#include <stdio.h>
#include <unistd.h>
#include <math.h>

int main() {
    int prime_count = 0;
    int number = 2;
    int *primes;

    // 使用sbrk分配初始内存
    primes = (int *)sbrk(0); // 获取当前brk的位置
    void *heap_start = primes;

    // 查找前1000个素数
    while (prime_count < 1000) {
        int flag = 1;
        for (int j = 2; j <= sqrt(number); j++) {
            if (number % j == 0) {
                flag = 0;
                break;
            }
        }

        if (flag == 1) {
            // 使用sbrk增加内存空间
            /*if (sbrk(sizeof(int)) == (void *)-1) {
                perror("sbrk failed");
                return 1;
            }*/
			sbrk(4);

            primes[prime_count] = number;
            prime_count++;
        }
        number++;
    }

    // 打印出前1000个素数
    for (int i = 0; i < 1000; i++) {
        printf("%d ", primes[i]);
        if ((i + 1) % 10 == 0) {
            printf("\n");
        }
    }

    // 使用brk取消分配的内存
    if (brk(heap_start) == -1) {
        perror("brk failed");
        return 1;
    }

    return 0;
}
